package org.timeismoney.payment.dao;

import java.util.Collection;
import java.util.List;

import org.timeismoney.payment.common.PageBean;

/**
 * @author sidl
 * 
 */
public interface GenericDao<E, I> {
	/**
	 * 新增一个实体对象
	 * 
	 * @param entity
	 * @return
	 */
	public I save(E e);

	/**
	 * 保存一个实体对象
	 * 
	 * @param entity
	 */
	public void update(E e);

	/**
	 * 根据unsaved-value保存或更新一个对象
	 * 
	 * @param entity
	 */
	public void merge(E e);

	/**
	 * 删除一个实体对象
	 * 
	 * @param entity
	 */
	public void delete(E e);

	/**
	 * 批量删除实体对象
	 * 
	 * @param entitys
	 */
	public void deleteAll(Collection<E> entities);

	/**
	 * 根据example查找对象
	 * 
	 * @param example
	 * @return
	 */
	public List<E> findByExample(E e);

	/**
	 * 根据example查找对象并分页
	 * 
	 * @param example
	 * @param page
	 * @return
	 */
	public PageBean<E> findByExample(E e, PageBean<E> page);

	/**
	 * 根据OID查询实体对象
	 * 
	 * @param clazz
	 * @param id
	 * @return
	 */
	public E getEntity(I i);

	/**
	 * 查询所有的实体对象
	 * 
	 * @param clazz
	 * @return
	 */
	public List<E> getEntitys();

	/**
	 * 多参数查询对象列表
	 * 
	 * @param queryString
	 * @param params
	 * @return
	 */
	public List<E> find(String queryString, Object... params);

	/**
	 * 带参数的分页查询
	 * 
	 * @param queryString
	 *            HQL查询语句
	 * @param page
	 *            分页对象
	 * @param params
	 *            参数列表
	 * @return PageBean 分页对象
	 */
	public PageBean<E> find(String queryString, PageBean<E> page,
			Object... params);
	
	public PageBean<E> find(PageBean<E> page);
}
